perm filename LYLE.TMP[MF,DEK] blob sn#547235 filedate 1980-12-03 generic text, type T, neo UTF8
Lyle, I have never seen such "sanitary" programs as the new METAFONT sources
you made. Thanks a million for such great work.
The lists below show all changes I felt desirable to make greater consistency
with the things I wrote (both code and manual), except for the inevitable
discrepancies in the directory pages for SAIL's editor. I think the reasons
for each change are self-evident, except perhaps for a couple error messages
I deleted. It seems to me OK that a person would give two varchar statements
with the idea that the second should override the first. And I don't think
we want to give an error when "design size is missing" since a lot of
special-purpose programs don't seem to need anything but a normal default.
Especially the DRAGON example in the METAFONT manual would get this error,
and I don't see why it should; but maybe I'm wrong.

As I mentioned yesterday, I'd like to know your changes to cmbase, and
a "schema" for the changes you made to generic files like cmr10, cmi10,
cmtt, cmsy10, cmathx (.MF), so that I can install these in our sources here.

And also as I mentioned yesterday, I'd like your documentation of the new
features to be in the form of changes to the file ERRATA.TXT[mf,dek]. I have
already incorporated lots of things, e.g. the new error messages and tfmmode.
But I didn't mention designsize, codingscheme, vectorwidths, charwx, charwy,
..., ocmode, dotwdmode (except briefly to mention the file extensions of the
latter). It's probably best to make the additions in the form of inserts to
to exisiting pages in the manual; alternatively you could add something like
the Appendix X to the TEX manual. If you decide that the "Designsize missing..."
error message should be reinstated, please also put that message into
the ERRATA list.

Well, twice again, I say thanks,
thanks,
and now here is the list of things I twiddled:

**** File 1) MFBASE.LYL[MF,DEK]/2P/98L
1)		space,space,ifc CONTROLZCOMMENT thenc carret elsec space endc,rel,rel,rel,space,space,
1)		space,space,quote,hashmark,space,carret,space,apost,
**** File 2) MFBASE.SAI[MF,DEK]/2P/98L
2)		space,space,carret,rel,rel,rel,space,space,
2)		space,space,quote,hashmark,space,carret,space,apost,
***************


**** File 1) MFBASE.LYL[MF,DEK]/2P/114L
1)	internaldef realpars=23,intpars=10, stringpars=1 # number of real, integer, and string parameters;
1)	internaldef penparam=realpars+4 # distinguish the first four integer parameters;
1)	internaldef intpar=realpars # offset used for integer parameters;
1)	internaldef stringpar=realpars+intpars # offset used for integer parameters;
1)	internal saf real array realparam[1:realpars] # real parameters to METAFONT;
**** File 2) MFBASE.SAI[MF,DEK]/2P/114L
2)	internaldef realpars=23,intpars=10, stringpars=2 # number of real, integer, and string parameters;
2)	internaldef penparam=realpars+4 # distinguish the first four integer parameters;
2)	internaldef intpar=realpars # offset used for integer parameters;
2)	internaldef stringpar=realpars+intpars # offset used for string parameters;
2)	internal saf real array realparam[1:realpars] # real parameters to METAFONT;
***************


**** File 1) MFHDR.LYL[MF,DEK]/2P/12L
1)	comment Here are various compile-time switches which indicate how your
1)		would like your Metafont to be configured.  Choose one from
**** File 2) MFHDR.SAI[MF,DEK]/2P/12L
2)	comment Here are various compile-time switches which indicate how you
2)		would like your Metafont to be configured.  Choose one from
***************


**** File 1) MFHDR.LYL[MF,DEK]/2P/17L
1)	define WAITS = false, TENEX = true;
1)	comment Do you want your proofmode output to be Press or XGP?;
1)	define XGP = false, PRESS = true;
1)	comment Do you want your on-line display to be Alto-ADIS or DataDisc?;
1)	define DATADISC = false, ADIS = true;
1)	comment Do you want Dover-style output modes supported?;
**** File 2) MFHDR.SAI[MF,DEK]/2P/17L
2)	define WAITS = true, TENEX = false;
2)	comment Do you want your proofmode output to be Press or XGP?;
2)	define XGP = true, PRESS = false;
2)	comment Do you want your on-line display to be Alto-ADIS or DataDisc?;
2)	define DATADISC = true, ADIS = false;
2)	comment Do you want Dover-style output modes supported?;
***************


**** File 1) MFHDR.LYL[MF,DEK]/2P/30L
1)	define CONTROLZCOMMENT = true # makes ↑Z a comment character like "%"
1)		instead of a space.  This makes it possible to use Bravo
1)		formatting commands on .mf source files, since it causes Metafont
1)		to ignore the Bravo trailers;
1)	define IFWAITS = ⊂ifc WAITS thenc⊃;
**** File 2) MFHDR.SAI[MF,DEK]/2P/31L
2)	define IFWAITS = ⊂ifc WAITS thenc⊃;
***************


**** File 1) MFNTRP.LYL[MF,DEK]/4P/66L
1)		IFTENEX print(""&nextline&"		") ENDTENEX # fake it;
1)		setprint("","F"); print(nextline,
**** File 2) MFNTRP.SAI[MF,DEK]/4P/66L
2)		IFTENEX print(nextline&"		") ENDTENEX # fake it;
2)		setprint("","F"); print(nextline,
***************


**** File 1) MFNTRP.LYL[MF,DEK]/4P/85L
1)	IFTENEX print(""&nextline&"		") ENDTENEX # fake it;
1)	setprint("","F"); print(nextline,
**** File 2) MFNTRP.SAI[MF,DEK]/4P/85L
2)	IFTENEX print(nextline&"		") ENDTENEX # fake it;
2)	setprint("","F"); print(nextline,
***************


**** File 1) MFNTRP.LYL[MF,DEK]/11P/274L
1)		if curtype≠quote then flusherror("string value expected");
1)		getstring;
**** File 2) MFNTRP.SAI[MF,DEK]/11P/274L
2)		if curtype≠quote then flusherror("Title expected");
2)		getstring;
***************


**** File 1) MFNTRP.LYL[MF,DEK]/11P/375L
1)	if isvarchar then flusherror("Duplicate varchar specification");
1)	isvarchar←true;
**** File 2) MFNTRP.SAI[MF,DEK]/11P/375L
2)	isvarchar←true;
***************


**** File 1) MFNTRP.LYL[MF,DEK]/11P/390L
1)		case field(tg,tfmdir[i]) of
1)		begin
1)		 [tagnone] ;
1)		 [taglig] error("Char with ligatures can't be in charlist");
1)		 [taglist] error("Duplicate charlist entry");
1)		 [tagvar] error("Varchar can't be in charlist except at the end")
1)		end;
1)		if i1<0 or i1>'177 then go to nogood;
**** File 2) MFNTRP.SAI[MF,DEK]/11P/389L
2)		case field(tg,tfmdir[i]) of begin
2)		[tagnone] ;
2)		[taglig][taglist] flusherror("Duplicate ligature/charlist entry");
2)		[tagvar] flusherror("Varchar can't be in the middle of a charlist")
2)		  end;
2)		if i1<0 or i1>'177 then go to nogood;
***************


**** File 1) MFNTRP.LYL[MF,DEK]/11P/423L
1)			case field(tg,tfmdir[i]) of
1)			begin
1)			 [tagnone] ;
1)			 [taglig] error("Duplicate ligature/kern label");
1)			 [taglist] error("Char in charlist can't have lig/kern prog");
1)			 [tagvar] error("Varchar can't have lig or kern")
1)			end;
1)			tfmdir[i]←tfmdir[i] xor ((tagnone xor taglig) lsh tgd);
**** File 2) MFNTRP.SAI[MF,DEK]/11P/420L
2)			case field(tg,tfmdir[i]) of begin
2)			[tagnone] ;
2)			[taglig][taglist] flusherror("Duplicate ligature/charlist entry");
2)			[tagvar] flusherror("Varchar can't have ligature/kern")
2)			  end;
2)			tfmdir[i]←tfmdir[i] xor ((tagnone xor taglig) lsh tgd);
***************


**** File 1) MFOUT.LYL[MF,DEK]/3P/56L
1)	kludge just returns the string "Meftafont User".  This determines the
1)	string that will appear on the Spruce break page of Press proof output;
**** File 2) MFOUT.SAI[MF,DEK]/3P/56L
2)	kludge just returns the string "Metafont User".  This determines the
2)	string that will appear on the Spruce break page of Press proof output;
***************


**** File 1) MFOUT.LYL[MF,DEK]/10P/92L
1)		begin
1)		case field(tg,tfmdir[charcode]) of
1)		 begin
1)		  [tagnone] ;
1)		  [taglig] error("Varchar can't have lig/kern program");
1)		  [taglist] error("Varchar can't be in the middle of a charlist");
1)		  [tagvar] confusion
1)		 end;
1)		tfmdir[charcode]←tfmdir[charcode] xor ((tagnone xor tagvar) lsh tgd);
**** File 2) MFOUT.SAI[MF,DEK]/10P/92L
2)		begin case field(tg,tfmdir[charcode]) of begin
2)		[tagnone] ;
2)		[taglig] error("Varchar can't have ligature/kern");
2)		[taglist] error("Varchar can't be in the middle of a charlist");
2)		else confusion
2)		  end;
2)		tfmdir[charcode]←tfmdir[charcode] xor ((tagnone xor tagvar) lsh tgd);
***************


**** File 1) MFOUT.LYL[MF,DEK]/10P/133L
1)		error("Designsize missing or zero; substituting 10 points");
1)		designsize←10.0;
**** File 2) MFOUT.SAI[MF,DEK]/10P/131L
2)		comment error("Design size missing or zero; substituting 10 points");
2)		designsize←10.0;
***************


**** File 1) MFRAST.LYL[MF,DEK]/5P/41L
1)		then drawerror("Curve out of range");
1)	if plotted then
**** File 2) MFRAST.SAI[MF,DEK]/5P/41L
2)		then drawerror("Curve out of range ("&cvs(x0)&","&cvs(y0)&":"&cvs(y1)&")");
2)	if plotted then
***************


**** File 1) MFRAST.LYL[MF,DEK]/5P/83L
1)		then drawerror("Curve out of range");
1)	if plotted then
**** File 2) MFRAST.SAI[MF,DEK]/5P/83L
2)		then drawerror("Curve out of range ("&cvs(x0)&":"&cvs(x1)&","&cvs(y0)&")");
2)	if plotted then
***************


**** File 1) MFRAST.LYL[MF,DEK]/6P/185L
1)		if ay<pmin or by>pmax then drawerror("Curve out of range");
1)		xr[ay]←x0; tr[ay]←t0;
**** File 2) MFRAST.SAI[MF,DEK]/6P/185L
2)		if ay<pmin or by>pmax then drawerror("Curve out of range ("&cvs(ay)&
2)			":"&cvs(by)&")");
2)		xr[ay]←x0; tr[ay]←t0;
***************


**** File 1) MFRAST.LYL[MF,DEK]/9P/54L
1)		begin pointw[1]←cursize;
1)		for k←0 thru npts+1 do
**** File 2) MFRAST.SAI[MF,DEK]/9P/54L
2)		begin 	pointw[1]←cursize max 1.0;
2)		for k←0 thru npts+1 do
***************


**** File 1) MFRAST.LYL[MF,DEK]/9P/64L
1)		filldraw(cursize);
1)		end
**** File 2) MFRAST.SAI[MF,DEK]/9P/64L
2)		filldraw(pointw[1]);
2)		end
***************


**** File 1) MFRAST.LYL[MF,DEK]/11P/3L
1)	IFDATADISC require "ddhdr.sai[gra,hpm]" source_file; comment Hans Moravec's Datadisc package;
1)	comment For documentation of Hans's routines see file \.{guide.gra[gra,hpm]};
**** File 2) MFRAST.SAI[MF,DEK]/11P/3L
2)	IFDATADISC require "ddhdr.sai[hdr,aam]" source_file; comment Hans Moravec's Datadisc package;
2)	comment For documentation of Hans's routines see file \.{guide.gra[gra,hpm]};
***************